package com.example.apidocserver.infrastructure.util.pdf;

import com.itextpdf.text.*;
import com.itextpdf.text.pdf.PdfPCell;
import com.itextpdf.text.pdf.PdfPTable;
import com.itextpdf.text.pdf.PdfWriter;

import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Paths;

/**
 * 表格工具
 *
 * @author xyqlg
 */
public class PdfTableUtil {


    public static void main(String[] args) {
        try {
            Document document = getDocument();
            // 打开文档
            document.open();

            String pStr = "长沙市搭街坊螺丝扣九分零四方式，十分谨慎考虑就，我们的应用程序有免费和付费订阅，以满足不同用户对不同预算的需求。 我们的 Plus 订阅包括独家功能和 Plus Voices 的使用，这是我们最新和最先进的语音。 Plus Voices 可以将流畅自然的文本转换为与人类声音的模式和语调相匹配的语音。";
            Paragraph paragraph = PdfParagraphUtil.getParagraph(pStr);
            document.add(paragraph);

            // 关闭文档
            document.close();
        } catch (IOException | DocumentException e) {
            e.printStackTrace();
        }
    }


    public static Document getDocument() throws DocumentException, IOException {
        return getDocument("D:/998其它/resume.pdf");
    }


    public static Document getDocument(String outPath) throws DocumentException, IOException {
        // 创建文档对象
        Document document = new Document();
        // 创建PDF输出流
        PdfWriter.getInstance(document, Files.newOutputStream(Paths.get(outPath)));
        return document;
    }

    /**
     * 设置有背景颜色的单元格
     *
     * @param font      字体
     * @param outStr    输出文字
     * @param baseColor 背景颜色
     * @return 单元格
     */
    public static PdfPCell getPdfPCell(Font font, String outStr, BaseColor baseColor) {
        PdfPCell cell = getPdfPCell(font, outStr);
        cell.setBackgroundColor(baseColor);
        return cell;
    }

    /**
     * 创建文字单元格
     *
     * @param font   字体
     * @param outStr 输出文字
     * @return 单元格
     */
    public static PdfPCell getPdfPCell(Font font, String outStr) {
        Phrase p = new Phrase(outStr, font);
        PdfPCell cell = new PdfPCell(p);
        cell.setPaddingLeft(6);
        cell.setPaddingRight(6);
        cell.setPaddingBottom(5);
        return cell;
    }

    /**
     * 创建表格对象
     *
     * @param tbCells 行中每单元格宽比
     * @return 表格对象
     */
    public static PdfPTable getPdfPTable(float[] tbCells) {
        PdfPTable pdfPTable = new PdfPTable(tbCells);
        pdfPTable.setTotalWidth(520);
        pdfPTable.setLockedWidth(true);
        return pdfPTable;
    }

    /**
     * 单元格插入图片
     *
     * @param path   图片路径
     * @param width  图片宽
     * @param height 图片高
     * @throws BadElementException 图片失败
     * @throws IOException         io失败
     */
    public static PdfPCell setImageCell(String path, float width, float height) throws BadElementException, IOException {
        Image image = Image.getInstance(path);
        image.setAlignment(Element.ALIGN_CENTER);
        image.scalePercent(width, height);
        return new PdfPCell(image);
    }
}
